package com.yc.oop6;

import java.util.Random;

public class Test2 {
	public static void main(String[] args) {
		Committee c = new Committee();
		
		Teacher t1 = new MathTeacher(1, "张三");
		c.judge(t1);
		
		t1 = new EnglishTeacher(2, "李四");
		c.judge(t1);
	}
}

abstract class Teacher{
	private int id;
	private String name;
	
	//老师都有一个方法: 教课   不同的老师,上课的方法是不一样的,因此, 这里就可以设置为抽象方法
	public abstract void teach();

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Teacher(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public Teacher() {
		super();
	}
}

//不同的老师       普通的类,来继承抽象类
class MathTeacher extends Teacher{
	//必须要重写这个抽象方法
	@Override
	public void teach() {
		System.out.println("数学老师: 解释,说明,推导,证明");
	}
	
	//继承
	public MathTeacher(int id, String name) {
		super(id, name);
	}
}

//再来一个
class EnglishTeacher extends Teacher{
	//必须要重写这个抽象方法
	@Override
	public void teach() {
		System.out.println("good morning, today we will talk about xxxx");
	}
	
	//继承
	public EnglishTeacher(int id, String name) {
		super(id, name);
	}
}

//评审委员会   评审老师上课
class Committee{
				//迟绑定     参数使用的是抽象类父类的引用, 而不面向具体的实现对象
	public void judge(Teacher t) {
		if( t == null ) {
			System.out.println("缺考");
			return;
		}
		
		System.out.println("自我介绍: 我的考号为:" + t.getId() + ", 我的姓名:" + t.getName());
		//老师讲课
		t.teach();			//因为子类继承抽象类,必定会实现这个抽象类的抽象方法
		
		//打分
		Random r = new Random();
		int score = r.nextInt(51) + 50;
		System.out.println("评委会给出的打分分数为:" + score);
	}
}
